`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    14:08:17 11/23/2012 
// Design Name: 
// Module Name:    main 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module main(clk_i,rst_i,inicio_i,uart_clk,uart_XMIT_dataH,uart_REC_dataH,elegir_pos_i,posicion_i,confirmar_i,state,turno
    );
	 input clk_i,rst_i,inicio_i,uart_REC_dataH,elegir_pos_i,confirmar_i;
	 input [7:0] posicion_i;
	 output uart_clk,uart_XMIT_dataH;
	 output [3:0] state;
	 output turno;
	 
	 wire inicio,elegir_pos,comienza_turno,write,read,comparar,xmitH,xmit_doneH,rec_readyH,termina_mem,cambia_turno,listo_leer,enviar_listo;
	 wire [7:0] rec_dataH,xmit_dataH;
	 wire [1:0] gano,sal_j,sal_o,dato;
	 wire [2:0] ad_a,ad_b,adre_a,adre_b,state;
	 wire [1:0] cuenta_oponente;

	 Mfsm maquina_estados (clk_i,rst_i,turno,inicio,comienza_turno,gano,sal_j,sal_o,write,read,comparar,ad_a,ad_b,termina_mem,cambia_turno,listo_leer,elegir_pos_i,xmit_dataH[2:0],enviar_listo,confirmar_i,state);
	 uart puerto_serie (clk_i,rst_i,uart_clk,uart_XMIT_dataH,xmitH,xmit_dataH,xmit_doneH,uart_REC_dataH,rec_dataH,rec_readyH);
	 memoria_juego mem_jugador (clk_i,adre_a,adre_b,sal_j,write,dato,read,comparar,ad_a,ad_b,turno);
	 memoria_juego mem_oponente (clk_i,adre_a,adre_b,sal_o,write,dato,read,comparar,ad_a,ad_b,!turno);
	 cont_serie receptor (clk_i,rst_i,adre_a,adre_b,dato,rec_dataH,rec_readyH,write,cambia_turno,termina_mem,listo_leer,comienza_turno);
	 cont_envia enviador (uart_clk,rst_i,xmitH,xmit_dataH,posicion_i,elegir_pos,enviar_listo,gano);
	 debouncer sync (clk_i,inicio_i,elegir_pos_i,inicio,elegir_pos);
	 
endmodule
